* Генератор вариаций на тему русской народной сказки РЕПКА * Программа КОНЦЕПТ, 21.12.2010, www.gendoc.ru * Здесь случайным образом определяются ОВОЩ, который вырос очень большим * и цепочка (ЦЕПЬ) от 3-х до 5-ти людей и животных, кто этот овощ будут вытаскивать. список выбратьСлучайный ОВОЩ репка;ананас;кабачок присвоить КАНДИДАТЫ_ТЯНУТЬ_ОВОЩ 'дед;баба;внучка;собака Жучка;кошка;мышка;медведь;бегемот;чудище мохнатое;Димка' присвоить ЦЕПЬ {} для (список сгенерить $результат 1 (список выбратьСлучайный $результат 3;4;5 ) ) список выбратьСлучайный ЕМУ_ПОВЕЗЛО [КАНДИДАТЫ_ТЯНУТЬ_ОВОЩ] список сцепить ЦЕПЬ $ [ЕМУ_ПОВЕЗЛО] множество разность КАНДИДАТЫ_ТЯНУТЬ_ОВОЩ $ [ЕМУ_ПОВЕЗЛО] следующий * Для генерации классического варианта сказки про репку достаточно * удалить признак комментария (символ * в начале строки) у следующей строки *присвоить ОВОЩ репка ЦЕПЬ дед;баба;внучка;собака Жучка;кошка;мышка * Инициализация грамматической базы данных * Используется для правильного употребления слов в соответствии с правилами * грамматики русского языка факт добавить \ r;сущ;дед;муж;деда \ r;сущ;баба;жен;бабу \ r;сущ;внучка;жен;внучку \ 'r;сущ;собака Жучка;жен;собаку Жучку' \ r;сущ;кошка;жен;кошку \ r;сущ;мышка;жен;мышку \ r;сущ;медведь;муж;медведя \ r;сущ;бегемот;муж;бегемота \ 'r;сущ;чудище мохнатое;ср;чудище мохнатое' \ r;сущ;Димка;муж;Димку \ r;сущ;репка;жен;репку \ r;сущ;кабачок;муж;кабачок \ r;сущ;ананас;муж;ананас \ r;прил;большой;большая;большое \ r;гл;посадил;посадила;посадило \ r;гл;вырос;выросла;выросло \ r;гл;позвал;позвала;позвало \ r;гл;ухватился;ухватилась;ухватилось * Вспомогательные функции * Используются для правильного употребления слов в соответствии с правилами * грамматики русского языка функция род? слово память локальный род если (факт сопоставитьСПервым $результат "r;сущ;[слово];[?род];[?]" ) иначе показать сообщение "Не могу определить род слова '[слово]'." стоп конец присвоить $результат [род] возврат функция словоформа слово часть_речи род падеж память локальный слово_на_печать вин_пад жен_род ср_род присвоить слово_на_печать [слово] выбрать [часть_речи] вариант сущ факт сопоставитьСПервым _ "r;сущ;[слово];[?];[?вин_пад]" если [падеж] == вин присвоить слово_на_печать [вин_пад] конец вариант прил факт сопоставитьСПервым _ "r;прил;[слово];[?жен_род];[?ср_род]" список отобразить слово_на_печать [род] "муж;жен;ср" "[слово];[жен_род];[ср_род]" [слово] вариант гл факт сопоставитьСПервым _ "r;гл;[слово];[?жен_род];[?ср_род]" список отобразить слово_на_печать [род] "муж;жен;ср" "[слово];[жен_род];[ср_род]" [слово] конецВыбора присвоить $результат [слово_на_печать] возврат функция Печать_предложения строка копировать первая_буква [ПРЕДЛОЖЕНИЕ] 1 1 строка прописные первая_буква $ строка присвоить ПРЕДЛОЖЕНИЕ $ 1 [первая_буква] >[ПРЕДЛОЖЕНИЕ] возврат * Начало обобщенного шаблона сказки про репку * Генерация аналога: "Сказка про то, как посадил дед репку. Выросла репка очень большая. * Дед тянет-потянет, а вытянуть не может." список голова ГЕРОЙ [ЦЕПЬ] строка сцепить ПРЕДЛОЖЕНИЕ 'Сказка про то, как ' \ (словоформа посадил гл (род? [ГЕРОЙ] ) '' ) ' ' [ГЕРОЙ] ' ' (словоформа [ОВОЩ] сущ '' вин ) Печать_предложения >(Вариация на тему русской народной сказки РЕПКА) > строка сцепить ПРЕДЛОЖЕНИЕ \ (словоформа посадил гл (род? [ГЕРОЙ] ) '' ) ' ' [ГЕРОЙ] ' ' (словоформа [ОВОЩ] сущ '' вин ) . Печать_предложения строка сцепить ПРЕДЛОЖЕНИЕ \ (словоформа вырос гл (род? [ОВОЩ] ) '' ) ' ' [ОВОЩ] ' очень ' (словоформа большой прил (род? [ОВОЩ] ) '' ) . Печать_предложения строка сцепить ПРЕДЛОЖЕНИЕ \ [ГЕРОЙ] ' ' (словоформа [ОВОЩ] сущ '' вин ) ' тянет-потянет, а вытянуть не может.' Печать_предложения * Генерация аналога: "Позвала баба внучку. Внучка за бабу, баба за деда, дед за репку. * Тянут-потянут, а вытянуть не могут." присвоить ЦЕПЬ_ТЯНУТ {} для [ЦЕПЬ] список сцепить ЦЕПЬ_ТЯНУТ $ [$ОбъектЦикла] если [$СписокЦикла] != {} список голова ПОМОЩНИК [$СписокЦикла] > строка сцепить ПРЕДЛОЖЕНИЕ \ (словоформа позвал гл (род? [$ОбъектЦикла] ) '' ) ' ' [$ОбъектЦикла] ' ' \ (словоформа [ПОМОЩНИК] сущ '' вин ) . Печать_предложения присвоить ПРЕДЛОЖЕНИЕ '' список инвертировать ЦЕПЬ_ТЯНУТ_ИНВ "[ЦЕПЬ_ТЯНУТ];[ПОМОЩНИК]" для [ЦЕПЬ_ТЯНУТ_ИНВ] если [$СписокЦикла] != {} если [$НомерИтерации] = 1 строка сцепить ПРЕДЛОЖЕНИЕ $ (словоформа ухватился гл (род? [ПОМОЩНИК] ) '' ) ' ' конец строка сцепить ПРЕДЛОЖЕНИЕ $ [$ОбъектЦикла] ' за ' \ (словоформа (список голова $результат [$СписокЦикла] ) сущ '' вин ) ', ' конец следующий строка сцепить ПРЕДЛОЖЕНИЕ $ [ГЕРОЙ] ' за ' (словоформа [ОВОЩ] сущ '' вин ) . Печать_предложения если (список размер $результат [$СписокЦикла] ) > 1 >Тянут-потянут, а вытянуть не могут. конец конец следующий * Счастливый конец сказки. строка сцепить ПРЕДЛОЖЕНИЕ 'Тянут-потянут... И вытянули ' (словоформа [ОВОЩ] сущ '' вин ) ! Печать_предложения